home *** CD-ROM | disk | FTP | other *** search
- /*
- * cd_commands.h: header file for cd_commands.c
- *
- * This is based on the file that NeXT included in
- * /NextDeveloper/Examples/UNIX/SCSI_CD,
- * done by James C. Lee at NeXT, Sep 1991.
- * It has been changed "just a bit" by Garance Alistair Drosehn/March 1994.
- *
- */
-
- #ifndef CD_COMMANDS
- #define CD_COMMANDS
-
- #import <sys/types.h>
- #import <libc.h>
- #import <sys/time.h>
- #import "cd_toc.h" /* declares struct cd_toc */
-
- /* I use a copy of the NS-3.1 version of bsd/dev/scsireg.h, because
- * at some point I think I want to split it apart into "field values"
- * (such as #define DEVTYPE_DISK), and actual structure definitions.
- * Garance Drosehn/Mar 94
- */
- /* #import <bsd/dev/scsireg.h> */
- #import "scsireg_31.h" /* garance... */
-
- int
- do_eject_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
- int
- do_spinup_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
- int
- do_stopunit_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
- int
- do_pauseaudio_4b(int fd, int pause, struct esense_reply * erp);
- int
- do_pauseaudio_c5(int fd, int pause, struct esense_reply * erp);
- int
- do_preventremoval_1e(int fd, int prevent, struct esense_reply * erp);
- int
- do_rezerounit_01(int fd, struct esense_reply * erp);
- int
- do_readtoc_43(int fd, struct cd_toc * toc_all, struct esense_reply * erp);
-
- int
- do_playaudio_c8(int fd, int lba, int length, struct esense_reply * erp);
-
- struct pa_msf {
- u_int min:8,
- sec:8,
- frame:8;
- };
- int
- do_playaudio_msf_47(int fd, struct pa_msf startmsf, struct pa_msf endmsf,
- struct esense_reply * erp);
-
- struct pb_status_reply { /* playback status */
- u_char pbs_audio_status;
- u_int pbs_logical_block; /* LBA format of abs time */
- u_short pbs_hour, /* MSF format of abs time */
- pbs_min,
- pbs_sec,
- pbs_frame;
- u_char pbs_ch0_sel, /* volume-of-play settings */
- pbs_ch0_vol;
- u_char pbs_ch1_sel,
- pbs_ch1_vol;
- u_char pbs_ch2_sel,
- pbs_ch2_vol;
- u_char pbs_ch3_sel,
- pbs_ch3_vol;
- };
-
- /* values returned for pbs_audio_status: */
- #define PBS_ASTAT_PLAYING 0x00
- #define PBS_ASTAT_PAUSED 0x01
- #define PBS_ASTAT_MUTED 0x02 /* audio muting on */
- #define PBS_ASTAT_PLAYCOMPLETE 0x03 /* previous play command just
- * completed */
- #define PBS_ASTAT_PLAYABORTED 0x04 /* previous play command just aborted */
- #define PBS_ASTAT_NOREQ 0x05 /* audio play not requested (yet?) */
-
- int
- do_playbackstatus_c4(int fd, struct pb_status_reply * pbstatus,
- struct esense_reply * erp);
- int
- do_playbackvolume_c9(int fd, int leftVolume, int rightVolume,
- struct esense_reply * erp);
-
- /* instead of having a do_readsubchannel_42 routine, there are routines to
- * return specific information from that (C10OP_READSUBCHANNEL = 42h) SCSI
- * command. These fill in a few fields, and mainly isolate calling programs
- * from byte-endian issues in getting a "page of sub-q channel data". Any
- * program which wants a do_readsubchannel_42 routine should include the
- * cd_cmdsint.h definitions directly.
- */
- struct rsc_cur_pos_reply {
- u_int track:8,
- index:8;
- u_int rsc_control:8,
- rsc_audio_status:8;
- /*
- * "absolute time" is position on disk, "relative time" is position in the
- * current track
- */
- u_int abs_logical_block; /* LBA format of abs time */
- u_int rel_logical_block; /* LBA format of rel time */
- u_short abs_hour,
- abs_min,
- abs_sec,
- abs_frame;
- u_short rel_hour,
- rel_min,
- rel_sec,
- rel_frame;
- };
-
- /* values for rsc_audio_status:
- * Note the CD-ROM that NeXT used to sell is all too eager to return
- * "Paused" in situations where the drive isn't really pausing in the
- * middle of a play request. This makes audio_status much less useful.
- */
- #define RSC_ASTAT_NOTSUPPORTED 0x00
- #define RSC_ASTAT_PLAYING 0x11
- #define RSC_ASTAT_PAUSED 0x12
- #define RSC_ASTAT_PLAYCOMPLETE 0x13 /* previous play command just
- * completed */
- #define RSC_ASTAT_PLAYABORTED 0x14 /* previous play command was just
- * aborted */
- #define RSC_ASTAT_NONE 0x15 /* no audio status (nothing is
- * happening) */
- int
- do_readcurrentposition_42(int fd, struct rsc_cur_pos_reply * curpos,
- struct esense_reply * erp);
-
- #define MEDIA_CATNUM_LENGTH 15
- struct rsc_media_catnum_reply {
- u_char catnum_isSet;
- u_char media_catnum[MEDIA_CATNUM_LENGTH];
- };
- int
- do_readmediacatnum_42(int fd, struct rsc_media_catnum_reply * catnum,
- struct esense_reply * erp);
-
- /* not done yet:
- int
- do_readtrackISRC_42(int fd, int track, struct rsc_track_isrc_reply *isrc,
- struct esense_reply *erp);
- */
-
- struct cd_volset_reply { /* volume-of-play settings */
- u_char ch0_sel,
- ch0_vol;
- u_char ch1_sel,
- ch1_vol;
- u_char ch2_sel,
- ch2_vol;
- u_char ch3_sel,
- ch3_vol;
- };
-
- int
- do_modesense_pc_E(int fd, struct cd_volset_reply * volset, struct esense_reply * erp);
- int
- do_modeselect_pc_E(int fd, int leftVolume, int rightVolume, struct esense_reply * erp);
-
- #endif CD_COMMANDS
-